package _13线程安全的集合_了解;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 CopyOnWriteArrayList
 该集合实现了List接口，在并发环境下可以代替ArrayList，保证操作的线程安全。

 CopyOnWriteArraySet
 该集合实现了Set接口，在并发环境下可以代替HashSet，保证操作的线程安全。

 Hashtable和ConcurrentHashMap
 在多线程下，两个集合都可以代替HashMap，实现线程安全的操作。
 Hashtable底层使用同步方法解决线程安全问题，而ConcurrentHashMap使用同步代码块保证线程安全，锁的粒度更细，在集合元素较多的时候，ConcurrentHashMap性能更高。
**/
public class Demo {

    static CopyOnWriteArrayList<Integer> list = new CopyOnWriteArrayList<>();
    public static void main(String[] args) throws InterruptedException {
        //线程不安全的集合类
        //List<Integer> list = new ArrayList<>();//list.size() = 3480

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10000; i++) {
                    list.add(i);
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10000; i++) {
                    list.add(i);
                }
            }
        }).start();

        Thread.sleep(3000);

        System.out.println("list.size() = " + list.size());
    }
}
